import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/chat'
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/Login.vue'),
    meta: { requiresAuth: false }
  },
  {
    path: '/chat',
    name: 'Chat',
    component: () => import('@/views/Chat.vue'),
    meta: { requiresAuth: true }
  },
  {
    path: '/admin',
    name: 'Admin',
    component: () => import('@/views/Admin.vue'),
    meta: { requiresAuth: true, requiresAdmin: true }
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

// 路由守卫
router.beforeEach((to, from, next) => {
  // 使用 store.state 直接访问状态，避免 getter 未定义的问题
  const token = store.state.token
  const userType = store.state.userType

  console.log(`导航从 ${from.path} 到 ${to.path}, token: ${token}, userType: ${userType}`)

  // 检查是否需要认证
  if (to.meta.requiresAuth) {
    if (!token) {
      console.log('未认证，重定向到登录页')
      // 避免循环重定向：如果已经在登录页，不再重定向
      if (from.path !== '/login') {
        next({ path: '/login', query: { redirect: to.fullPath } })
      } else {
        next() // 如果已经在登录页，不再重定向
      }
      return
    }
    
    // 检查是否需要超级管理员权限
    if (to.meta.requiresSuperAdmin && userType < 3) {
      console.log('权限不足，重定向到首页')
      next('/')
      return
    }
    
    // 检查是否需要管理员权限
    if (to.meta.requiresAdmin && userType < 2) {
      console.log('权限不足，重定向到首页')
      next('/')
      return
    }
  }

  // 已登录用户访问登录页时重定向到聊天页面
  if (to.path === '/login' && token) {
    console.log('已登录，重定向到聊天页面')
    // 检查是否是从其他页面跳转到登录页的
    const redirect = from.query.redirect || '/chat'
    next(redirect)
    return
  }

  next()
})

export default router
